home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / util / boot / MathPatch.lha / MathIEEESingBasPatch / MathIEEESingBasPatch.asm next >
Encoding:
Assembly Source File  |  1995-02-15  |  2.5 KB  |  179 lines

  1. ; Patch for faulty "mathieeesingbas.library" on 68040
  2. ;
  3. ; Copyright (c) 1994-1995 by Matthias Scheler
  4.  
  5.         CODE
  6.         MC68882
  7.  
  8.         INCLUDE    "exec/types.i"
  9.         INCLUDE    "exec/memory.i"
  10.         INCLUDE    "exec/execbase.i"
  11.         INCLUDE    "dos/dosextens.i"
  12.  
  13. ; Constants
  14.  
  15. _LVOForbid        EQU    -132
  16. _LVOAllocMem        EQU    -198
  17. _LVOFreeMem        EQU    -210
  18. _LVOGetMsg        EQU    -372
  19. _LVOReplyMsg        EQU    -378
  20. _LVOWaitPort        EQU    -384
  21. _LVOSetFunction        EQU    -420
  22. _LVOCloseLibrary    EQU    -414
  23. _LVOOpenLibrary        EQU    -552
  24. _LVOCacheClearU        EQU    -636
  25.  
  26. _LVOPutStr    EQU    -948
  27.  
  28. _LVOIEEESPMul    EQU    -78
  29. _LVOIEEESPDiv    EQU    -84
  30.  
  31. _AbsExecBase    EQU    4
  32.  
  33. ; Macros
  34.  
  35. CALL:        MACRO
  36.         jsr    _LVO\1(a6)
  37.         ENDM
  38.  
  39. ; we don't support Workbench
  40.  
  41.         move.l    (_AbsExecBase).w,a6
  42.         move.l    ThisTask(a6),a0
  43.         tst.l    pr_CLI(a0)
  44.         bne.s    CLI
  45.         lea    pr_MsgPort(a0),a2
  46.  
  47.         move.l    a2,a0
  48.         CALL    WaitPort
  49.  
  50.         CALL    Forbid
  51.  
  52.         move.l    a2,a0
  53.         CALL    GetMsg
  54.  
  55.         move.l    d0,a1
  56.         CALL    ReplyMsg
  57.  
  58.         moveq    #0,d0
  59.         rts
  60.         
  61. ; check for 68040 with FPU (=> NO 68LC040)
  62.  
  63. CLI:        move.w    AttnFlags(a6),d0
  64.         and.w    #AFF_68040+AFF_68882,d0
  65.         cmp.w    #AFF_68040+AFF_68882,d0
  66.         beq.s    OpenMathLib
  67.  
  68.         moveq    #5,d0
  69.         rts
  70.  
  71. ; open "mathieeesingbas.library"
  72.  
  73. OpenMathLib:    moveq    #10,d2
  74.  
  75.         lea    MathName(pc),a1
  76.         moveq    #0,d0
  77.         CALL    OpenLibrary
  78.  
  79.         move.l    d0,d3
  80.         beq    Exit
  81.  
  82. ; check if patch is already installed
  83.  
  84.         move.l    d3,a0
  85.         move.l    _LVOIEEESPMul+2(a0),a0
  86.         cmp.l    #'PTCH',-4(a0)
  87.  
  88.         bne.s    GetMem
  89.  
  90.         moveq    #5,d2
  91.         bra.s    CloseLib
  92.  
  93. ; allocate memory
  94.  
  95. GetMem:        moveq    #PatchEnd-Patch,d0
  96.         moveq    #MEMF_PUBLIC,d1
  97.         CALL    AllocMem
  98.  
  99.         move.l    d0,d4
  100.         beq.s    CloseLib
  101.  
  102.         lea    Patch(pc),a0
  103.         move.l    d4,a1
  104.         moveq    #PatchEnd-Patch-1,d0
  105. CopyMemLoop:    move.b    (a0)+,(a1)+
  106.         dbf    d0,CopyMemLoop
  107.  
  108.         CALL    CacheClearU
  109.  
  110. ; apply patches
  111.  
  112.         move.l    d3,a1
  113.         lea    _LVOIEEESPMul,a0
  114.         move.l    d4,d0
  115.         addq.l    #NewMul-Patch,d0
  116.         CALL    SetFunction
  117.  
  118.         move.l    d3,a1
  119.         lea    _LVOIEEESPDiv,a0
  120.         move.l    d4,d0
  121.         add.l    #NewDiv-Patch,d0
  122.         CALL    SetFunction
  123.  
  124. ; print message
  125.  
  126.         moveq    #0,d2
  127.  
  128.         lea    DOSName(pc),a1
  129.         moveq    #37,d0
  130.         CALL    OpenLibrary
  131.  
  132.         move.l    d0,d4
  133.         beq.s    CloseLib
  134.  
  135.         exg    d4,a6
  136.         move.l    #PatchMsg,d1
  137.         CALL    PutStr
  138.  
  139.         exg    d4,a6
  140.         move.l    d4,a1
  141.         CALL    CloseLibrary
  142.  
  143. ; close "mathieeesingbas.library"
  144.  
  145. CloseLib    move.l    d3,a1
  146.         CALL    CloseLibrary
  147.  
  148. Exit:        move.l    d2,d0
  149.         rts
  150.  
  151. ; Patch
  152.  
  153. Patch:        dc.b    "PTCH"
  154.  
  155. NewMul:        fmove.s    d0,fp0
  156.         fmove.s    d1,fp1
  157.         fmul    fp1,fp0
  158.         fmove.s    fp0,d0
  159.         rts
  160.  
  161. NewDiv:        fmove.s    d0,fp0
  162.         fmove.s    d1,fp1
  163.         fdiv    fp1,fp0
  164.         fmove.s    fp0,d0
  165.         rts
  166.  
  167. PatchEnd:
  168.  
  169. ; Strings
  170.  
  171. Version:    dc.b    "$VER: MathIEEESingBasPatch 1.2 (14.02.95)",0
  172.  
  173. MathName:    dc.b    "mathieeesingbas.library",0
  174. DOSName:    dc.b    "dos.library",0
  175.  
  176. PatchMsg:    dc.b    "mathieeesingbas.library patched",10,0
  177.  
  178.         END
  179.